package com.iot.ic.utils.response;


import com.iot.ic.common.CustomException;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

/**
 * @Description:请求参数工具类
 * @author xiuge
 * @date 2016年7月4日上午10:04:50
 */
public class RequestUtil {

	/**
	 * 判断参数列表中的参数是否有空值，有则抛出异常反馈
	 * @param baseModel
	 * @param nameList
     * @return
     */
	public static boolean checkNullParam(Object baseModel, List<String> nameList) {
		try {
			String className = baseModel.getClass().getName();
			Class clazz = Class.forName(className);// 根据类名获得其对应的Class对象 写上你想要的类名
			Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得
			for (Field f : fields) {
				String name = f.getName();
				if (nameList.contains(name)) {
					Method m = baseModel.getClass().getMethod("get" + firstLetterToUpper(name));// 根据方法名称获取对应属性
					if (m.invoke(baseModel)==null) {
						throw new CustomException(name+"参数不能为空");
					}
				}/*else {不需要的参数如果传进来是否需要设为空
					Method getMethod = baseModel.getClass().getMethod("get" + firstLetterToUpper(name));
					if (getMethod.invoke(baseModel)!=null) {
						Method setMethod = baseModel.getClass().getMethod("set" + firstLetterToUpper(name));
						setMethod.invoke(setMethod, null);
					}
				}*/
			}
		} catch (ClassNotFoundException e) {
			return false;
		}catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}

	/**
	 * @Description:判断是否所有参数都不为空
	 * @param baseModel
	 * @return
	 */
	public static boolean getMap(Object baseModel) {
		try {
			String className = baseModel.getClass().getName();
			if (className.contains("$$")) {
				className = className.substring(0, className.indexOf("$$"));
			}
			Class clazz = Class.forName(className);// 根据类名获得其对应的Class对象 写上你想要的类名
			Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得
			for (Field f : fields) {
				String name = f.getName();
				Method m = baseModel.getClass().getMethod("get" + firstLetterToUpper(name));// 根据方法名称获取对应属性
				if (m.invoke(baseModel)==null) {
					return false;
				}
			}
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/**
	 * 首字符大写
	 * 
	 * @param str
	 * @return
	 */
	public static String firstLetterToUpper(String str) {
		char[] array = str.toCharArray();
		array[0] -= 32;
		return String.valueOf(array);
	}

}
